package com.yupi.yupicturebackend.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 资源权限校验注解
 * 用于校验用户对特定资源的操作权限
 * 
 * @author yupi
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ResourceAuth {

    /**
     * 资源类型
     * @return 资源类型枚举
     */
    ResourceType resourceType();

    /**
     * 资源ID参数名
     * 从方法参数中获取资源ID的参数名
     * @return 参数名
     */
    String resourceIdParam() default "id";

    /**
     * 需要的操作权限
     * @return 操作类型
     */
    Operation operation();

    /**
     * 是否检查资源所有者
     * @return true-检查所有者，false-不检查
     */
    boolean checkOwner() default true;

    /**
     * 权限校验失败时的错误信息
     * @return 错误信息
     */
    String message() default "无权限访问该资源";

    /**
     * 资源类型枚举
     */
    enum ResourceType {
        PICTURE("图片"),
        SPACE("空间"),
        USER("用户");

        private final String description;

        ResourceType(String description) {
            this.description = description;
        }

        public String getDescription() {
            return description;
        }
    }

    /**
     * 操作类型枚举
     */
    enum Operation {
        READ("读取"),
        WRITE("写入"),
        DELETE("删除"),
        SHARE("分享"),
        MANAGE("管理");

        private final String description;

        Operation(String description) {
            this.description = description;
        }

        public String getDescription() {
            return description;
        }
    }
}
